//获取应用实例
var webim = require('../../utils/webim_wx.js');
var webimhandler = require('../../utils/webim_handler.js');
const CONFIG = require('../config');

global.webim = webim;
var Config = CONFIG.app;

var app = getApp()
Page({
  data: {
    identifier: CONFIG.users[0].identifier, // 当前用户身份标识，必选
    userSig: CONFIG.users[0].userSig, // 当前用户签名，必选
    nickName: CONFIG.users[0].nickName, // 当前用户昵称，选填
    motto: 'Hello World',
    msgs: [],
    currentMsgsArray: [],
    text_content: '',
    toview :0,
  },
  //事件处理函数

  getContent: function(e) {
    var that = this;
    var content = e.detail.value;
    that.data.text_content = e.detail.value;
  },

  sendMsg: function(e) {
    var that = this;
    var content = e.detail.value;

    this.onSendMsg();
  },

  initIM: function() {
    var that = this;
    var identifier = that.data.identifier;

    webimhandler.init({
      accountMode: 0, //帐号模式，0-表示独立模式，1-表示托管模式(已停用，仅作为演示)
      accountType: Config.accountType,
      sdkAppID: Config.sdkappid,
      selType: webim.SESSION_TYPE.GROUP,
      selToID: identifier,
      selSess: null //当前聊天会话
    });

    //当前用户身份
    var loginInfo = {
      'sdkAppID': Config.sdkappid, //用户所属应用id,必填
      'appIDAt3rd': Config.sdkappid, //用户所属应用id，必填
      'accountType': Config.accountType, //用户所属应用帐号类型，必填
      'identifier': that.data.identifier, //当前用户ID,必须是否字符串类型，选填
      'identifierNick': that.data.nickname || '', //当前用户昵称，选填
      'userSig': that.data.userSig, //当前用户身份凭证，必须是字符串类型，选填
      'headurl':'https://rfgzytest.oss-cn-beijing.aliyuncs.com/upload/10035/is_acmachine_enclosure/2019/05/16/2019051611320717836.png'
    };

    that.data.loginInfo = loginInfo;

    webim.Log.info('----当前用户身份----' + JSON.stringify(loginInfo));

    //监听（多终端同步）群系统消息方法，方法都定义在demo_group_notice.js文件中
    var onGroupSystemNotifys = {
      "5": webimhandler.onDestoryGroupNotify, //群被解散(全员接收)
      "11": webimhandler.onRevokeGroupNotify, //群已被回收(全员接收)
      "255": webimhandler.onCustomGroupNotify //用户自定义通知(默认全员接收) 
    };

    //监听连接状态回调变化事件
    var onConnNotify = function(resp) {
      switch (resp.ErrorCode) {
        case webim.CONNECTION_STATUS.ON:
          //webim.Log.warn('连接状态正常...');
          break;
        case webim.CONNECTION_STATUS.OFF:
          webim.Log.warn('连接已断开，无法收到新消息，请检查下你的网络是否正常');
          break;
        default:
          webim.Log.error('未知连接状态,status=' + resp.ErrorCode);
          break;
      }
    };


    //监听事件
    var listeners = {
      "onConnNotify": webimhandler.onConnNotify, //选填
      "onBigGroupMsgNotify": function(msg) {
        webimhandler.onBigGroupMsgNotify(msg, function(msgs) {
          that.receiveMsgs(msgs);
        })
      }, //监听新消息(大群)事件，必填
      "onMsgNotify": webimhandler.onMsgNotify, //监听新消息(私聊(包括普通消息和全员推送消息)，普通群(非直播聊天室)消息)事件，必填
      "onGroupSystemNotifys": webimhandler.onGroupSystemNotifys, //监听（多终端同步）群系统消息事件，必填
      "onGroupInfoChangeNotify": webimhandler.onGroupInfoChangeNotify //监听群资料变化事件，选填
    };

    //其他对象，选填
    var options = {
      'isAccessFormalEnv': true, //是否访问正式环境，默认访问正式，选填
      'isLogOn': true //是否开启控制台打印日志,默认开启，选填
    };

    webim.login(loginInfo, listeners, options, function(res) {
      console.log('success', res);
      that.noMoreChat();
    }, function(res) {
      console.log('success', res)
    });
  },

  onUnload: function() {
    // 登出
    webimhandler.logout();
  },
  onLoad: function(options) {
    console.log(options);
    this.setData({
      userSig: options.userSig,
      identifier: options.identifier,
      nickName: options.identifier
    });
    this.initIM();
  },



  //发送消息(文本或者表情)
  onSendMsg: function() {
    var that = this;
    var isSend = true; //是否为自己发送
    var seq = -1; //消息序列，-1表示 SDK 自动生成，用于去重
    var random = Math.round(Math.random() * 4294967296); //消息随机数，用于去重
    var msgTime = Math.round(new Date().getTime() / 1000); //消息时间戳
    var selType = webim.SESSION_TYPE.C2C;
    var subType; //消息子类型
    var loginInfo = that.data.loginInfo;
    if (subType == webim.SESSION_TYPE.C2C) {
      subType = webim.C2C_MSG_SUB_TYPE.COMMON;
    }

    var selSess = new webim.Session(selType, loginInfo.identifier);

    var msg = new webim.Msg(selSess, isSend, seq, random, msgTime, loginInfo.identifier, subType, loginInfo.identifierNick);
    var text_obj, face_obj, tmsg, emotionIndex, emotion, restMsgIndex;
    //解析文本和表情
    var text_content = that.data.text_content;
    var expr = /\[[^[\]]{1,3}\]/mg;
    var emotions = text_content.match(expr);

    if (!emotions) {
      text_obj = new webim.Msg.Elem.Text(text_content);
      msg.addText(text_obj);
    }

    webim.sendMsg(msg, function(resp) {
      if (selType == webim.SESSION_TYPE.C2C) {
        that.addMsg(msg); //这个方法上面有
        console.log("发送成功")
        that.setData({
          text_content: "",
        })
      }
    }, function(err) {
      console.log(err.ErrorInfo);
    })
  },
  //处理消息（私聊(包括普通消息和全员推送消息)，普通群(非直播聊天室)消息） 我这里是只要私聊的
  addMsg: function(msg) {
    var that = this;
    var fromAccount, fromAccountNick, sessType, subType;
    fromAccount = msg.getFromAccount();
    if (!fromAccount) {
      fromAccount = '';
    }
    fromAccountNick = msg.getFromAccountNick();
    if (!fromAccountNick) {
      fromAccountNick = fromAccount;
    }
    //解析消息
    //获取会话类型
    //webim.SESSION_TYPE.GROUP-群聊，
    //webim.SESSION_TYPE.C2C-私聊，
    sessType = msg.getSession().type();
    //获取消息子类型
    //会话类型为群聊时，子类型为：webim.GROUP_MSG_SUB_TYPE
    //会话类型为私聊时，子类型为：webim.C2C_MSG_SUB_TYPE
    subType = msg.getSubType();
    switch (sessType) {
      case webim.SESSION_TYPE.C2C: //私聊消息
        switch (subType) {
          case webim.C2C_MSG_SUB_TYPE.COMMON: //c2c普通消息
            //业务可以根据发送者帐号fromAccount是否为app管理员帐号，来判断c2c消息是否为全员推送消息，还是普通好友消息
            //或者业务在发送全员推送消息时，发送自定义类型(webim.MSG_ELEMENT_TYPE.CUSTOM,即TIMCustomElem)的消息，在里面增加一个字段来标识消息是否为推送消息
            that.convertMsg(msg); //解析方法
            break;
        }
        break;
    }
  },

  convertMsg: function(msg) {
    var that = this;
    var elems, elem, type, content, isSelfSend;
    var loginInfo = that.data.loginInfo; //自己的资料
    var friendInfo = that.data.friendInfo; //对方的资料，这里要特别注意一下，消息里面是不会返回双方的头像和昵称的，只能通过指定的方法得到。
    elems = msg.getElems();
    isSelfSend = msg.getIsSend(); //消息是否为自己发的 true是自己发送，
    var sess = msg.sess;
    var currentMsg = {}; //设置消息数组，存消息
    var currentMsgsArray = that.data.currentMsgsArray;
    var allChatList = that.data.allChatList;
    for (var i in elems) {
      elem = elems[i];
      type = elem.getType();
      content = elem.getContent();
      switch (type) {

        case webim.MSG_ELEMENT_TYPE.TEXT:
          var msgContent = content;
          var msgTime = msg.getTime(); //得到当前消息发送的时间
          //得到当天凌晨的时间戳
          var timeStamp = new Date(new Date().setHours(0, 0, 0, 0)) / 1000;
          var thisdate;
          var d = new Date(msgTime * 1000); //根据时间戳生成的时间对象
          var min = d.getMinutes();
          var hour = d.getHours();
          //得到时和分，分小于10时，只返回一位数
          if (min < 10) {
            min = "0" + min;
          }
          //得到月份和天  月份一般是从0开始，所以展示出来要+1
          var month = d.getMonth();

          var day = d.getDate();
          //得到时间   当天时间应该只显示时分  当天以前显示日期+时间
          if (timeStamp > msgTime) {
            thisdate = ((month + 1) + '-' + day + ' ' + hour + ":" + min);
          } else {
            thisdate = (hour + ":" + min);
          }
          currentMsg.msgContent = msgContent; //当前消息的内容
          currentMsg.msgTime = thisdate;
          currentMsg.isSelfSend = isSelfSend;
          currentMsg.type = 'text';
          //根据是否自己发送的消息，设置双方的头像
          if (isSelfSend) {
            currentMsg.avatarUrl = loginInfo.headurl;
          } else {
            currentMsg.avatarUrl = friendInfo.src;
          }
          //然后将每一条聊天消息push进数组
          currentMsgsArray.push(currentMsg);
          that.setData({
            currentMsgsArray: currentMsgsArray,
          })
          break;
      }
      that.data.toview = currentMsgsArray.length;
      console.log(currentMsgsArray);
    }
  },


  noMoreChat: function() {
    var that = this;
    var lastMsgTime = 0; //第一次拉取好友历史消息时，必须传 0
    var msgKey = '';
    var options = {
      'Peer_Account': that.data.identifier, //指定的好友帐号
      'MaxCnt': 10, //拉取的消息数目
      'LastMsgTime': lastMsgTime, //上一次拉取的时间  在第一次拉去消息的时候，这里必须为0
      'MsgKey': msgKey
    };
    var selSess = null;

    webim.getC2CHistoryMsgs(
      options,
      function(resp) {
        console.log(resp)
        var complete = resp.Complete; //是否还有历史消息可以拉取，1-表示没有，0-表示有
        if (resp.MsgList.length == 0) {
          return
        }
        //拉取消息后，要将下一次拉取信息所需要的东西给存在缓存中
        wx.setStorageSync('lastMsgTime', resp.LastMsgTime);
        wx.setStorageSync('msgKey', resp.MsgKey);
        var msgList = resp.MsgList;

        for (var j in msgList) { //遍历新消息
          var msg = msgList[j];
          if (msg.getSession().id() == that.data.identifier) { //为当前聊天对象的消息
            selSess = msg.getSession();
            //在聊天窗体中新增一条消息
            that.addMsg(msg)

          }
        }
        //消息已读上报，并将当前会话的消息设置成自动已读
        webim.setAutoRead(selSess, true, true);
      },
      function(cbError) {
        console.log(cbError);
      }
    );
  },


})